
/**
 * weiview-pluse 通用的一些方法
 */
export const webviewMethods = {
  // 调用 webview 内部逻辑
  evalJs(funcName, data) {
    // // wv = this.currentWebview.children()[0];
    // // this.evalJs(`${funcName}(${JSON.stringify(data)})`);
    this.wv?.evalJS(`${funcName}(${JSON.stringify(data)})`);
    // this.$refs.refWebview?.evalJS(`${funcName}(${JSON.stringify(data)})`);
  },
  // webview向外部发送消息
  getMessage(event) {
    // console.log("getMessage_> ", event.detail.data);
    let messageData = event.detail.data[0];
    // 对应的方法
    const method = getMessageMethods[messageData.api];
    if (method) {
      method(messageData);
    } else {
      console.log(`未找到对应的方法 ${messageData.api}, 请检查是否已注册`);
    }
  },
  getWebviewSrc: function () {
    let pages = getCurrentPages();
    let page = pages[pages.length - 1];
    return page.data.url;
  },
  setWebviewSrc: function (url) {
    let pages = getCurrentPages();
    let page = pages[pages.length - 1];
    page.setData({
      url: url,
    });
  },
}

export const getMessageMethods = {
  //返回上一页面
  navigateBack(messageData) {
    uni.navigateBack();
  },
  //跳转至非table页面
  navigateTo(messageData) {
    uni.navigateTo({ url: messageData.url });
  },
  // 分享
  share(messageData) {
    let shareObj = messageData.data;
    // 微信小程序版本类型，可取值： 0-正式版； 1-测试版； 2-体验版。 默认值为0。
    // shareObj.miniProgram.type = 2;
    //获取图片后压缩。type为0时，推荐使用小于20Kb的图片
    uni.downloadFile({
      url: shareObj.imageUrl,
      success: (images) => {
        uni.compressImage({
          src: images.tempFilePath,
          quality: 20,
          width: "60%",
          height: "60%",
          success: (res) => {
            uni.share({
              provider: shareObj.provider,
              scene: shareObj.scene,
              type: shareObj.type,
              title: shareObj.title,
              href: shareObj.href,
              imageUrl: res.tempFilePath,
              miniProgram: shareObj.miniProgram,
              success: function (res) {
                this.currentWebview.evalJS(`postJS(${JSON.stringify(res)})`);
              },
              fail: function (err) {
                uni.showToast({
                  icon: "none",
                  title: `分享失败，${err.errMsg}`,
                });
                console.log("fail:" + JSON.stringify(err));
              },
            });
          },
        });
      },
    });
  },
  clipboardData(messageData) {
    let obj = event.detail.data[0].clipboardData;
    if (obj.type == "get") {
      uni.getClipboardData({
        success: (res) => {
          if (!res.data) return;
          this.currentWebview.evalJS(`openModal(${JSON.stringify(res.data)})`);
        },
      });
    } else if (obj.type == "set") {
      uni.setClipboardData({
        data: obj.data || "",
        success: () => {
          console.log("success");
          uni.hideToast();
        },
      });
    }
  },
  onWebviewShowed(messageData){
    console.log("messageData.api onWebviewShowed");
  }
}

// 生命周期通用处理
export const webviewLifeCycle = {
  data() {
    return {
      isForceHide: false,
      wv: null,
      currentWebview: null,
      path: "/hybrid/html/print-preview.html",
      height: "500px",
      kbHeight: 0,
    }
  },
  onLoad(e) {
    const sys = uni.getSystemInfoSync();
    // 100 为 100rpx的值
    const px = uni.upx2px(120);
    // console.log("getSystemInfoAsync", sys);
    this.height = sys.screenHeight - px + "px";
  },
  onShow() { },
  created() {
    // #ifdef APP-PLUS
    console.log("created >?", this.$parent);
    this.currentWebview = this.$parent.$scope.$getAppWebview();
    // 获取手机系统信息
    const info = uni.getSystemInfoSync();
    // 设置状态栏高度（H5顶部无状态栏小程序有状态栏需要撑起高度）
    this.statusBarHeight = info.statusBarHeight;
    //设置高度样式
    // 100 为 100rpx的值
    const px = uni.upx2px(120);
    this.height = info.screenHeight - px + "px";
    // console.log('height', this.height)
    const ter = setTimeout(() => {
      this.wv = this.currentWebview.children()[0];
      this.wv.setStyle({
        // top: this.statusBarHeight,
        height: this.height,
        scalable: true, //webview的页面是否可以缩放，双指放大缩小
      });
      clearTimeout(ter);
    }, 500); //如果是页面初始化调用时，需要延时一下
    /** webview 内input事件键盘调起 */
    //  监听键盘高度变化
    uni.onKeyboardHeightChange((obj) => {
      // 获取系统信息
      let _sysInfo = uni.getSystemInfoSync();
      let _heightDiff = _sysInfo.screenHeight - _sysInfo.windowHeight;
      let _diff = obj.height - _heightDiff;
      // 键盘高度
      this.kbHeight = (_diff > 0 ? _diff : 0) - 2;
      console.log("kbHeight_>", this.kbHeight);
    });
    // 同时监听页面变化
    uni.onWindowResize((res) => {
      // TODO 因为设置了v-show 而不是 v-if 需要处理非处于当前页面时的
      console.log("onWindowResize:", res);

      if (res.size.windowHeight < parseInt(this.height)) {
        setTimeout(() => {
          this.wv.setStyle({
            // top: this.barHeight,
            top: 0,
            // webview的高度动态修改为减去键盘高度后的
            height: parseInt(this.height) - this.kbHeight,
            bottom: 0,
          });
        }, 100);
      } else {
        setTimeout(() => {
          // const info = uni.getSystemInfoSync();
          // 100 为 100rpx的值
          const px = uni.upx2px(120);
          // this.height = (info.screenHeight - px) + 'px';
          // this.reSizeWV();
          this.wv.setStyle({
            top: null,
            height: this.height,
            // bottom: -px,
            bottom: null,
            scalable: false, //webview的页面是否可以缩放，双指放大缩小
          });
        }, 100);
      }
    });
    // #endif
  },
}